// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
//
// typedef struct Node {
//     int data;           // 数据域
//     struct Node* next;  // 指针域
// } Node, *LinkList;      // LinkList为头指针类型
//
// Node* CreateNode(int data) {
//     Node* newNode = (Node*)malloc(sizeof(Node));
//     if (!newNode) {
//         perror("Memory allocation failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->data = data;
//     newNode->next = NULL;
//     return newNode;
// }
//
// void InsertAtTail(LinkList* L, int data) {
//     Node* newNode = CreateNode(data);
//
//     if (*L == NULL) {  // 空链表情况
//         *L = newNode;
//     } else {
//         Node* p = *L;
//         while (p->next != NULL) {
//             p = p->next;
//         }
//         p->next = newNode;
//     }
// }
//
// void InsertAtHead(LinkList* L, int data) {
//     Node* newNode = CreateNode(data);
//     newNode->next = *L;
//     *L = newNode;  // 更新头指针
// }
//
// bool InsertAtIndex(LinkList* L, int index, int data) {
//     if (index < 0) return false;
//
//     if (index == 0) {  // 头部插入
//         InsertAtHead(L, data);
//         return true;
//     }
//
//     Node* p = *L;
//     for (int i = 0; p != NULL && i < index - 1; i++) {
//         p = p->next;
//     }
//
//     if (p == NULL) return false;  // 越界
//
//     Node* newNode = CreateNode(data);
//     newNode->next = p->next;
//     p->next = newNode;
//     return true;
// }
//
// bool DeleteNode(LinkList* L, int data) {
//     if (*L == NULL) return false;
//
//     // 处理头节点删除
//     if ((*L)->data == data) {
//         Node* temp = *L;
//         *L = (*L)->next;
//         free(temp);
//         return true;
//     }
//
//     Node *prev = *L, *curr = (*L)->next;
//     while (curr != NULL) {
//         if (curr->data == data) {
//             prev->next = curr->next;
//             free(curr);
//             return true;
//         }
//         prev = curr;
//         curr = curr->next;
//     }
//     return false;
// }
//
// Node* FindNode(LinkList L, int data) {
//     Node* p = L;
//     while (p != NULL) {
//         if (p->data == data) {
//             return p;
//         }
//         p = p->next;
//     }
//     return NULL;
// }
//
// int GetLength(LinkList L) {
//     int len = 0;
//     Node* p = L;
//     while (p != NULL) {
//         len++;
//         p = p->next;
//     }
//     return len;
// }
//
// void PrintList(LinkList L) {
//     Node* p = L;
//     while (p != NULL) {
//         printf("%d -> ", p->data);
//         p = p->next;
//     }
//     printf("NULL\n");
// }
//
// void DestroyList(LinkList* L) {
//     Node* p = *L;
//     while (p != NULL) {
//         Node* temp = p;
//         p = p->next;
//         free(temp);
//     }
//     *L = NULL;  // 置头指针为NULL
// }
//
// int main() {
//     LinkList L=NULL;
//     InsertAtTail(&L,10);
//     InsertAtTail(&L,20);
//     InsertAtTail(&L,30);
//     InsertAtTail(&L,40);
//     InsertAtTail(&L,50);
//     PrintList(L);
//     return 0;
// }